module.exports =
    /******/ (function(modules) { // webpackBootstrap
    /******/ 	// The module cache
    /******/
    var installedModules = {};
    /******/
    /******/ 	// The require function
    /******/
    function __webpack_require__(moduleId) {
        /******/
        /******/ 		// Check if module is in cache
        /******/
        if (installedModules[moduleId]) {
            /******/
            return installedModules[moduleId].exports;
            /******/
        }
        /******/ 		// Create a new module (and put it into the cache)
        /******/
        var module = installedModules[moduleId] = {
            /******/            i: moduleId,
            /******/            l: false,
            /******/            exports: {}
            /******/
        };
        /******/
        /******/ 		// Execute the module function
        /******/
        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
        /******/
        /******/ 		// Flag the module as loaded
        /******/
        module.l = true;
        /******/
        /******/ 		// Return the exports of the module
        /******/
        return module.exports;
        /******/
    }

    /******/
    /******/
    /******/ 	// expose the modules object (__webpack_modules__)
    /******/
    __webpack_require__.m = modules;
    /******/
    /******/ 	// expose the module cache
    /******/
    __webpack_require__.c = installedModules;
    /******/
    /******/ 	// define getter function for harmony exports
    /******/
    __webpack_require__.d = function(exports, name, getter) {
        /******/
        if (!__webpack_require__.o(exports, name)) {
            /******/
            Object.defineProperty(exports, name, { enumerable: true, get: getter });
            /******/
        }
        /******/
    };
    /******/
    /******/ 	// define __esModule on exports
    /******/
    __webpack_require__.r = function(exports) {
        /******/
        if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
            /******/
            Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
            /******/
        }
        /******/
        Object.defineProperty(exports, '__esModule', { value: true });
        /******/
    };
    /******/
    /******/ 	// create a fake namespace object
    /******/ 	// mode & 1: value is a module id, require it
    /******/ 	// mode & 2: merge all properties of value into the ns
    /******/ 	// mode & 4: return value when already ns object
    /******/ 	// mode & 8|1: behave like require
    /******/
    __webpack_require__.t = function(value, mode) {
        /******/
        if (mode & 1) value = __webpack_require__(value);
        /******/
        if (mode & 8) return value;
        /******/
        if ((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
        /******/
        var ns = Object.create(null);
        /******/
        __webpack_require__.r(ns);
        /******/
        Object.defineProperty(ns, 'default', { enumerable: true, value: value });
        /******/
        if (mode & 2 && typeof value != 'string') for (var key in value) __webpack_require__.d(ns, key, function(key) {
            return value[key];
        }.bind(null, key));
        /******/
        return ns;
        /******/
    };
    /******/
    /******/ 	// getDefaultExport function for compatibility with non-harmony modules
    /******/
    __webpack_require__.n = function(module) {
        /******/
        var getter = module && module.__esModule ?
            /******/            function getDefault() {
                return module['default'];
            } :
            /******/            function getModuleExports() {
                return module;
            };
        /******/
        __webpack_require__.d(getter, 'a', getter);
        /******/
        return getter;
        /******/
    };
    /******/
    /******/ 	// Object.prototype.hasOwnProperty.call
    /******/
    __webpack_require__.o = function(object, property) {
        return Object.prototype.hasOwnProperty.call(object, property);
    };
    /******/
    /******/ 	// __webpack_public_path__
    /******/
    __webpack_require__.p = '';
    /******/
    /******/
    /******/ 	// Load entry module and return exports
    /******/
    return __webpack_require__(__webpack_require__.s = 0);
    /******/
})
    /************************************************************************/
    /******/ ([
        /* 0 */
        /***/ (function(module, exports, __webpack_require__) {

            'use strict';


            Component({
                options: {
                    addGlobalClass: true,
                    pureDataPattern: /^_/
                },
                properties: {
                    duration: {
                        type: Number,
                        value: 500
                    },
                    easingFunction: {
                        type: String,
                        value: 'default'
                    },
                    loop: {
                        type: Boolean,
                        value: true
                    },
                    videoList: {
                        type: Array,
                        value: [],
                        observer: function observer() {
                            var newVal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];

                            this._videoListChanged(newVal);
                        }
                    }
                },
                data: {
                    nextQueue: [],
                    prevQueue: [],
                    curQueue: [],
                    circular: false,
                    _last: 1,
                    _change: -1,
                    _invalidUp: 0,
                    _invalidDown: 0,
                    _videoContexts: []
                },
                lifetimes: {
                    attached: function attached() {
                        this.data._videoContexts = [wx.createVideoContext('video_0', this), wx.createVideoContext('video_1', this), wx.createVideoContext('video_2', this)];
                    }
                },
                methods: {
                    _videoListChanged: function _videoListChanged(newVal) {
                        var _this = this;

                        var data = this.data;
                        newVal.forEach(function(item) {
                            data.nextQueue.push(item);
                        });
                        if (data.curQueue.length === 0) {
                            this.setData({
                                curQueue: data.nextQueue.splice(0, 3)
                            }, function() {
                                _this.playCurrent(1);
                                var context = this.data._videoContexts[1];
                                var activeId = this.data.curQueue[1].id;
                                this.triggerEvent('change', { activeId: activeId, context: context });
                            });
                        }
                    },
                    animationfinish: function animationfinish(e) {
                        var _data = this.data,
                            _last = _data._last,
                            _change = _data._change,
                            curQueue = _data.curQueue,
                            prevQueue = _data.prevQueue,
                            nextQueue = _data.nextQueue;

                        var current = e.detail.current;
                        var diff = current - _last;
                        if (diff === 0) return;
                        var context = this.data._videoContexts[current];
                        this.data._last = current;
                        this.playCurrent(current);
                        this.triggerEvent('change', { activeId: curQueue[current].id, context: context });
                        var direction = diff === 1 || diff === -2 ? 'up' : 'down';
                        if (direction === 'up') {
                            if (this.data._invalidDown === 0) {
                                var change = (_change + 1) % 3;
                                var add = nextQueue.shift();
                                var remove = curQueue[change];
                                if (add) {
                                    prevQueue.push(remove);
                                    curQueue[change] = add;
                                    this.data._change = change;
                                } else {
                                    this.data._invalidUp += 1;
                                }
                            } else {
                                this.data._invalidDown -= 1;
                            }
                        }
                        if (direction === 'down') {
                            if (this.data._invalidUp === 0) {
                                var _change2 = _change;
                                var _remove = curQueue[_change2];
                                var _add = prevQueue.pop();
                                if (_add) {
                                    curQueue[_change2] = _add;
                                    nextQueue.unshift(_remove);
                                    this.data._change = (_change2 - 1 + 3) % 3;
                                } else {
                                    this.data._invalidDown += 1;
                                }
                            } else {
                                this.data._invalidUp -= 1;
                            }
                        }
                        var circular = true;
                        if (nextQueue.length === 0 && current !== 0) {
                            circular = false;
                        }
                        if (prevQueue.length === 0 && current !== 2) {
                            circular = false;
                        }
                        this.setData({
                            curQueue: curQueue,
                            circular: circular
                        });
                    },
                    playCurrent: function playCurrent(current) {
                        this.data._videoContexts.forEach(function(ctx, index) {
                            index !== current ? ctx.pause() : ctx.play();
                        });
                    },
                    onPlay: function onPlay(e) {
                        this.trigger(e, 'play');
                    },
                    onPause: function onPause(e) {
                        this.trigger(e, 'pause');
                    },
                    onEnded: function onEnded(e) {
                        this.trigger(e, 'ended');
                    },
                    onError: function onError(e) {
                        this.trigger(e, 'error');
                    },
                    onTimeUpdate: function onTimeUpdate(e) {
                        this.trigger(e, 'timeupdate');
                    },
                    onWaiting: function onWaiting(e) {
                        this.trigger(e, 'wait');
                    },
                    onProgress: function onProgress(e) {
                        this.trigger(e, 'progress');
                    },
                    onLoadedMetaData: function onLoadedMetaData(e) {
                        this.trigger(e, 'loadedmetadata');
                    },
                    trigger: function trigger(e, type) {
                        var ext = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};

                        var detail = e.detail;
                        var activeId = e.target.dataset.id;
                        this.triggerEvent(type, Object.assign(Object.assign(Object.assign({}, detail), { activeId: activeId }), ext));
                    }
                }
            });

            /***/
        })
        /******/]);
